From 4d09bf3b9ba5130e804ff6d9b11d5f146c41619e Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 30 Apr 2020 13:30:51 +0100 Subject: [PATCH] demos: Remove gtk_dialog_run() Use modal dialogs and the "response" signal. --- demos/gtk-demo/builder.c | 6 +++-- demos/gtk-demo/demo.ui | 1 + demos/gtk-demo/dialog.c | 48 +++++++++++++++++++++++++++++++--------- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/demos/gtk-demo/builder.c b/demos/gtk-demo/builder.c index b0c3f3cdc3..56d2fb08ea 100644 --- a/demos/gtk-demo/builder.c +++ b/demos/gtk-demo/builder.c @@ -26,8 +26,10 @@ about_activate (GSimpleAction *action, builder = g_object_get_data (G_OBJECT (window), "builder"); about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1")); - gtk_dialog_run (GTK_DIALOG (about_dlg)); - gtk_widget_hide (about_dlg); + gtk_window_set_transient_for (GTK_WINDOW (about_dlg), GTK_WINDOW (window)); + gtk_window_set_hide_on_close (GTK_WINDOW (about_dlg), TRUE); + g_signal_connect (about_dlg, "response", G_CALLBACK (gtk_widget_hide), NULL); + gtk_widget_show (about_dlg); } static void diff --git a/demos/gtk-demo/demo.ui b/demos/gtk-demo/demo.ui index a25c12d6a1..7cb39a33e7 100644 --- a/demos/gtk-demo/demo.ui +++ b/demos/gtk-demo/demo.ui @@ -94,6 +94,7 @@ Builder demo gtk3-demo + True diff --git a/demos/gtk-demo/dialog.c b/demos/gtk-demo/dialog.c index 99953a5cb5..ccc16c9f6f 100644 --- a/demos/gtk-demo/dialog.c +++ b/demos/gtk-demo/dialog.c @@ -25,11 +25,36 @@ message_dialog_clicked (GtkButton *button, "number of times:"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%d", i); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); + gtk_widget_show (dialog); i++; } +typedef struct { + GtkWidget *local_entry1; + GtkWidget *local_entry2; + GtkWidget *global_entry1; + GtkWidget *global_entry2; +} ResponseData; + +static void +on_dialog_response (GtkDialog *dialog, + int response, + gpointer user_data) +{ + ResponseData *data = user_data; + + if (response == GTK_RESPONSE_OK) + { + gtk_editable_set_text (GTK_EDITABLE (data->global_entry1), + gtk_editable_get_text (GTK_EDITABLE (data->local_entry1))); + gtk_editable_set_text (GTK_EDITABLE (data->global_entry2), + gtk_editable_get_text (GTK_EDITABLE (data->local_entry2))); + } + + gtk_window_destroy (GTK_WINDOW (dialog)); +} + static void interactive_dialog_clicked (GtkButton *button, gpointer user_data) @@ -42,7 +67,7 @@ interactive_dialog_clicked (GtkButton *button, GtkWidget *local_entry1; GtkWidget *local_entry2; GtkWidget *label; - gint response; + ResponseData *data; dialog = gtk_dialog_new_with_buttons ("Interactive Dialog", GTK_WINDOW (window), @@ -81,15 +106,18 @@ interactive_dialog_clicked (GtkButton *button, gtk_grid_attach (GTK_GRID (table), local_entry2, 1, 1, 1, 1); gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry2); - response = gtk_dialog_run (GTK_DIALOG (dialog)); + data = g_new (ResponseData, 1); + data->local_entry1 = local_entry1; + data->local_entry2 = local_entry2; + data->global_entry1 = entry1; + data->global_entry2 = entry2; - if (response == GTK_RESPONSE_OK) - { - gtk_editable_set_text (GTK_EDITABLE (entry1), gtk_editable_get_text (GTK_EDITABLE (local_entry1))); - gtk_editable_set_text (GTK_EDITABLE (entry2), gtk_editable_get_text (GTK_EDITABLE (local_entry2))); - } + g_signal_connect_data (dialog, "response", + G_CALLBACK (on_dialog_response), + data, (GClosureNotify) g_free, + 0); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_widget_show (dialog); } GtkWidget * -- 2.30.2